"""
这是关于python数据类型的demo
java种一共有8种基本类型
    java数据类型:
        整形 byte short int long
        浮点型(小数):double,float
        布尔型:boolean
        字符型:char-可以用阿斯克码转换成int类型
            注意用的最多的String不是基础数据类型。在内存中储存模型也和几种基本类型不一样
python基本数据类型:
    数字型Number->数字型number包含三种 整形int,浮点型float,complex(复数类型)
    字符串型String
    Tuple(元组-也就是java里面的数组)
    list(list集合)
    Set(Set集合)
    Dictionary(字典)
"""

"""
数字型-整数-int
    python3只有int作为整数，而python2中还多了一个长整数long
        和java类似，长整型需要后面加L
    python中获取对象类型的方法 Type和isinstance
        type(对象)->获取未知对象的数据类型
        isinstance(对象，类型)->效率更高也能实现type的作用。
    有数字就会有运算，python只有同类型才能运算不然会报错
        python字符串参与运算要做类型转换 int(字符串)或者eval(字符串)
        运算包含算术运算(如下demo),
        比较运算，返回true或者False,和java一样（== ！= <> >=等运算）
        赋值运算 +=，
        逻辑运算,返回值是True或者False 和java一样。通常配合if使用
            and->且 相当与Java逻辑运算的&&
            or ->或 相当于java逻辑运算的||
            not ->非 相当于java的!(!.equals不等于)
        位运算 &->类似java的&(且),|->类似java的|(或)，~->取反和java取反(~)一样
"""
int_type=100
print(type(int_type))
print(isinstance(int_type,int))
long_type=100
# 算术运算
print("+运算",int_type+int_type)
print("-运算",int_type-int_type)
print("*运算",int_type*int_type)
print("/运算，除法运算，python会得到小数",int_type/3)
print("%运算 取模，就是取商的余数 ",int_type%3)
print("//运算 取整，就是取商的整数",int_type//3)
print("**运算,幂运算 java里面2**3就是2的三次幂是8",int_type**3)
str_type="15"
print("字符型转Int类型",int_type+int(str_type)+eval(str_type))
# 比较运算 == ！= <> >=等运算
print("==运算",int==long_type)
res=0
res+=long_type
print("+=运算",res)
if( int_type and long_type):
    print("a和b都有值")
if(int_type<200 & long_type>200):
        print("&测试a小于200，b大于200")
else:
        print("&测试，走else方法")
if(int_type<200 | long_type>200):
        print("|测试a小于200，b大于200")
# python是强格式语言 所以else只能和if对其 对不齐就会报错。和Java使用中括号解决不一样 python中if没有中括号概念，后面格式是:
else:
    print("|测试，走else方法")
print("2>>3",2>>3)
"""
数字型-浮点数-float
    浮点数和整数都可以进行运算，运算结果是精确的。这一点和java不一样
        例如:java 6/4返回结果是整数为1 取余就是2 而python 6/4就等于1.5
"""
float_type=3.1415925
print(type(float_type))
print(float_type*3)
print("6/4=",6/4)
"""
复数-用的不多-complex
complex(a,b)表示复数，a和b都是float数
"""
""""
字符型-str
java字符型是char 只能存字符 可以用阿斯克码转成int 
    java种String不是基本数据类型，在内存结构中也不一样是一个内存区域
python中str就是字符型 在python中加了"的都是字符型，都是字符串
    ''或""本身只是一种表示方式，不是字符串的一部分，如果想让字符串显示''或"",和Java一样需要使用转义符\->\'
    多引号有什么作用，多引号的作用标识为会多行字符串，会自动换行
和java不同 python字符串也能计算，只能相加和相乘
    字符串相加就是java的字符串拼接-》字符串+字符串-》不能和整形运算，要计算需要类型转换str(整形)
    字符串相乘-》java没有，就是字符串复制 -》字符串*数字
每个系统的字符串都有自己的字符串编码。gbk utf8 ascii三种
    python的ord方法和chr方法能实现字符和阿斯克码转换，这一点和java一样
    python默认字符集格式是utf-8,len()方法可以看到字符串长度=》java中String的length方法
    python的字符串比较是==,默认采用ascii比较=》java里面String的equals方法
    python字符串方法scrip(),去除头尾空格=》类似java的trim()方法
    python字符串拼接（+）
    python字符串复制（*）
    python字符串查找内容index(内容)-》类似于java的indexOf
    python字符串查找内容find(内容)-》类似于java的indexOf
    python字符串包含和java一样可以做字符串编码转换 使用字符串.encode(格式)=》转为指定格式的字符串 byte.decode(格式) 字节流转字符串
模板字符串，在开发中常见的模板字符串就是短信验证码，python写法%s和%配合使用
    
"""
str_demo="123"
print(type(str_demo))
# 转义符demo
changeType_demo='I\'m\"OK\"'
print(changeType_demo)
# 自动换行字符串demo
libai_poem=''' 
故人西辞黄鹤楼，
烟花三月下扬州。
'''
dufu_porm='''
会当凌绝顶，
一览众山小。
'''
print(libai_poem)
# 字符串拼接和复制demo
libai="李白"
dufu="杜甫"
int_100=100
#相加其实就是简单拼接
print(libai+dufu+str(int_100))
#相乘其实就是复制自己多少次，再拼接在一起
print((libai+dufu)*10)
print("张对应的ascii",ord("张"))
print("24352对应的汉字",chr(24352))
print("字符串张三李四王五赵六长度=",len("张三李四王五赵六"))
str_1="张三"
str_2="张三"
str_3="里斯"
print("str张三和str2张三是否相等=",str_1==str_2)
print("str张三和str3李四是否相等=",str_1==str_3)
print("张三转gbk=",str_1.encode("gbk"))
str_4='java'
print("str4转ascii=",str_4.encode("ascii"))
str_5=b'\xe4\xb8\xad\xe6\x96\x87'
print("字节流转字符串=",str_5.decode("utf-8",errors='ignore'))
print("模板字符串设置")
print("你好，%s。你的短信验证码是%d"%("张三",851234))
"""
空值
 程序赋值既可以赋值确定值，也可以赋空值
 python空值None ,和java的null关键字一样
"""
null_type=None
null_demo=''
print("空值demo=",null_type)
print("空字符串demo=",null_demo)
print("空值和空字符串不一样",null_demo==null_type)
trim_demo="     张三         "
print("     张三         去除空格=",trim_demo.strip())
str_4="查找字符串内容如下"
print("字符串 查找字符串内容如下 查找下index方法=",str_4.index("下"))
print("字符串 查找字符串内容如下 查找下find方法=",str_4.find("下"))
"""
布尔型-bool
    和java一样 python中布尔类型也只有True和False两种,用来比较逻辑
    布尔型常用来配合逻辑运算符使用
    布尔类型就涉及到三元运算符写法 
        java三元运算符 1==2?"a":"b" 如果1=2那么显示a,不然显示b
    p   ython中三元运算符写法 返回变量1+if+条件+else+返回变量2
"""
int_a=3
int_b=5
boolean_flag=True
print(type(boolean_flag))
print( boolean_flag if int_a==int_b  else "里斯" )

